package com.whut.www.file_storage;

import android.content.Context;
import android.graphics.Bitmap;

import java.io.FileNotFoundException;

/**
 * Created by clvc on 2017/7/1.
 * 真正的速度是看不见的 !
 * Today is today , we will go !
 */

public interface ISDCardHelper {
    ///////////////////////////////////////////////////////////////////////////
    // 判断SD卡是否挂载
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 获取SD卡的挂载状态
     *
     * @return 挂载状态
     */
    public boolean isSDCardMounted();

    ///////////////////////////////////////////////////////////////////////////
    // 以下方法为获取SD卡各种目录的路径
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 获取SD卡的根目录路径
     *
     * @return
     */
    public String getSDCardBaseDir();

    /**
     * 获取SD卡的9个公有目录的路径
     * Environment.getExternalStoragePublicDirectory()
     *
     * @param type 公有目录类型Alarms、DCIM、Download、Movies、Music、Notifications、Pictures、Podcasts、Ringtones
     * @return
     */
    public String getSDCardPublicDir(String type);

    /**
     * 获取SD卡私有的Cache目录的路径
     *
     * @param context
     * @return
     */
    public String getSDCardPrivateCacheDir(Context context);

    /**
     * 获取SD卡私有的files目录的路径。
     * files目录下又内置了7个目录（没有DCIM、DOWNLOADS）
     *
     * @param context
     * @param type
     * @return
     */
    public String getSDCardPrivateFilesDir(Context context, String type);

    ///////////////////////////////////////////////////////////////////////////
    // 以下方法是往各种目录下保存文件
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 将字节数组保存进SD卡公有目录
     *
     * @param data
     * @param type
     * @param filename
     * @return
     */
    public boolean saveFileToSDCardPublicDir(byte[] data, String type, String filename) throws
            Exception;

    /**
     * 将字节数组保存进SD卡的自定义目录下
     *
     * @param data
     * @param dirs
     * @param filename
     * @return
     */
    public boolean saveFileToSDCardCustomDir(byte[] data, String dirs, String filename) throws
            FileNotFoundException, Exception;

    /**
     * 将字节数组保存进SD卡的私有Cache目录
     *
     * @param data
     * @param filename
     * @param context
     * @return
     */
    public boolean saveFileToSDCardPrivateCacheDir(byte[] data, String filename, Context context)
            throws FileNotFoundException, Exception;

    /**
     * 将字节数组保存进SD卡私有的Files目录下
     *
     * @param data
     * @param type
     * @param filename
     * @param context
     * @return
     */
    public boolean saveFileToSDCardPrivateFilesDir(byte[] data, String type, String filename,
                                                   Context context) throws Exception;

    /**
     * 将Bitmap保存进SD卡私有Cache目录下
     *
     * @param bm
     * @param filename
     * @param context
     * @return
     */
    public boolean saveBitmapToSDCardPrivateCacheDir(Bitmap bm, String filename, Context context)
            throws FileNotFoundException, Exception;


    /**
     * 将Bitmap保存进SD卡公有目录下
     *
     * @param bm
     * @param type
     * @param filename
     * @return
     * @throws FileNotFoundException
     * @throws Exception
     */
    public boolean saveBitmapToSDCardPublicDir(Bitmap bm, String type, String filename) throws
            FileNotFoundException, Exception;


    /**
     * 从SD卡获取文件，返回字节数组
     *
     * @param filePath
     * @return
     */
    public byte[] loadFileFromSDCard(String filePath) throws FileNotFoundException, Exception;

    ///////////////////////////////////////////////////////////////////////////
    // 从SD卡中获取文件
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 从SD卡中获取Bitmap对象
     *
     * @param filePath
     * @return
     */
    public Bitmap loadBitmapFromSDcard(String filePath) throws Exception;
}
